﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Media.Media3D;


namespace MultiAgents
{
    class Robot : Agent
    {
        private int _power; /* How much the robot will decrease PV/power of an ogre/robot if the robot hits the target*/
        private int _temp_power; /*Temporary value that should be add to the _power value at the next beginning interaction session*/
        private const double TIME = 5.0;/*temps de repos du robot par défaut*/

        public Robot(Program prg, Random random, float p, float p_2, float p_3) : base(prg, random, p, p_2, p_3)
        {
            _power = random.Next(2,10);//avant: 10
            _nextMove = DateTime.Now;
            _temp_power = 0;
        }

        public void move()
        {
            /*le robot ne bouge que si il n'a pas de temps de repos à respecter*/
            if (DateTime.Now >= _nextMove)
            {
                /*Chasse à l'ogre*/
                //base.hunt(); 

                /*hunt() buggée donc déplacement aléatoire*/
                base.move_random();

                /*Collision*/
                List<Agent> L = _program.isCollisioning(this);

                /*Déchargement de la variable _temp_power dans power en début de session d'interaction*/
                this._power += this._temp_power;
                this._temp_power = 0;

                foreach (Agent A in L)
                {
                    if (A.GetType().Equals(this.GetType())) /* si A est Robot, 2 robots se tapent! */
                    {
                        /*Rr: le 2nd robot en intéraction: */
                        Robot Rr = ((Robot)A);
                        int Rrpow = Rr.getPower();

                        if (this._power >= Rrpow) /*Le robot de la classe a la puissance la plus élevée des 2*/
                        {
                            /*Si notre robot est le plus fort, il tape l'autre et augmente sa puissance (_power) de */
                            this._temp_power += Rrpow; // Peu importe si la puissance est négative, 
                        }
                        else /*le robot de la classe est le plus faible*/
                        {
                            this._temp_power -= Rrpow; /*le plus faible diminue sa puissance de la puissance de l'autre, passage en négatif possible, le robot soignera alors les ogres au lieu de les taper*/
                        }
                    }
                    else /*cas: A = Ogre */
                    {
                        /*Oo, l'ogre en intéraction avec le robot de la classe concernée*/
                        /*l'ogre se fait blesser ou soigner, en tout les cas ses pv varient de la puissance du robot*/

                        /*le robot voit sa puissance augmenter de 1 après avoir tapé un ogre*/
                        this._temp_power += 1;

                    }
                }
               
                /*Une fois que le robot a tapé tout ce qui était à portée(et si qqc était à portée), il se recharge (=laisse le temps aux victimes de fuir!!)*/
                if (L.Count != 0)
                {
                    _nextMove = DateTime.Now.AddSeconds(TIME);
                    Console.WriteLine("au moins une collision a eu lieu");
                }
            }
        }

        public int getPower()
        {
            return _power;
        }
    }
}
